AWS Glue DataBrewにYAML形式のレシピファイルをインポートしてみた
データアナリティクス事業本部の鈴木です。
AWS Glue DataBrew(以降、DataBrew)のレシピをDataBrew外でほかの人と共有したい場合に、どのようにすれば良いのか気になったということで、これまで2つ記事をご紹介してきました。
ところで、これまではJSON形式のレシピファイルをインポートする方法を紹介しましたが、YAML形式のレシピファイルをインポートする方法を紹介します。レシピはYAML形式でもエクスポート可能なためです。
過去の記事はこちらです。
解決したい状況
なんらかの理由で、YAML形式のレシピファイルをインポートしたい場合です。
例えば、DataBrewで前処理を作成していたときに、同じチームの人がすごく上手なレシピを考えてくれました。「レシピはエクスポートして送っといたよ〜」と言うので、見てみたらYAML形式でエクスポートされていて、しかもその人はしばらく忙しくて時間がないらしい。これは自分でJSON形式に書き直すしかないかな?といった場合です。
先に結論
update-recipe
で、レシピファイルを組み込んだYAMLファイルを--cli-input-yaml
オプションで読み込み、レシピを更新する。--cli-input-yaml
オプションで読み込むレシピファイルを組み込んだYAMLファイルは--generate-cli-skeleton
オプションで生成したスケルトンを修正すれば良い。- 上記オプションを使うため、AWS CLI v2で実施する必要がある。
検証の準備
サンプルのレシピを作る
レシピファイルをインポートしたいレシピを作成しておきます。
今回は、AWSマネジメントコンソール編で作成したときと同じ方法で、バージョン1.0を公開しておきました。
このレシピは、"有名なチェスゲームの動き"サンプルファイルから作成したデータセットに、以下のように3つの前処理を行います(以降、この画面をレシピ画面
と呼びます)。
インポートするYAML形式のレシピファイルを作る
インポートするYAML形式のYAMLファイルを準備します。今回は、事前に別のレシピからエクスポートした、以下のレシピファイルを使います(内容が少し長いですが、中身を理解する必要はないので気にしないでください)。
このレシピファイルは、AWSマネジメントコンソール編で作成したレシピのバージョン2.0と同じです。このレシピでは、データセットに対して7ステップの前処理を行います。レシピ画面からYAML形式でエクスポートすると、このような形式でエクスポートできます。
- Action: Operation: REMOVE_VALUES Parameters: sourceColumn: white_rating ConditionExpressions: - Condition: LESS_THAN Value: '1800' TargetColumn: white_rating - Action: Operation: REMOVE_VALUES Parameters: sourceColumn: black_rating ConditionExpressions: - Condition: LESS_THAN Value: '1800' TargetColumn: black_rating - Action: Operation: GROUP_BY Parameters: groupByAggFunctionOptions: >- [{"sourceColumnName":"winner","targetColumnName":"winner_count","targetColumnDataType":"int","functionName":"COUNT"}] sourceColumns: '["winner","victory_status"]' useNewDataFrame: 'true' - Action: Operation: REMOVE_VALUES Parameters: sourceColumn: winner ConditionExpressions: - Condition: IS Value: '["draw","draw"]' TargetColumn: winner - Action: Operation: REPLACE_TEXT Parameters: pattern: mate sourceColumn: victory_status value: checkmate - Action: Operation: REPLACE_TEXT Parameters: pattern: resign sourceColumn: victory_status value: other player resigned - Action: Operation: REPLACE_TEXT Parameters: pattern: outoftime sourceColumn: victory_status value: time ran out
AWS CLI バージョン2のインストール
紹介する操作では、AWS CLI バージョン2の機能を利用します。バージョン2は記事執筆時点でAWS CLIの最新のメジャーバージョンです。もし、検証したい環境がインストールしても問題ない環境で、かつインストール未実施であれば、以下のドキュメントにしたがってインストールしてください。
AWS CLI バージョン 2 のインストール、更新、およびアンインストール - AWS コマンドラインインターフェイス
やってみる
YAML形式のスケルトンを生成する
まず、CLIの--generate-cli-skeleton
オプションを使って、aws databrew update-recipe
に渡すためのYAML形式のスケルトンを生成します。
--generate-cli-skeleton
オプションにyaml-inputを指定すると、YAML形式でスケルトンを生成してくれます。
aws databrew update-recipe --generate-cli-skeleton yaml-input
実行すると以下が表示されるので、コピペでファイルに貼り付けるか、リダイレクトするかして、入力用のYAMLファイルを作ります。
Description: '' # A description of the recipe. Name: '' # [REQUIRED] The name of the recipe to be updated. Steps: # One or more steps to be performed by the recipe. - Action: # [REQUIRED] The particular action to be performed in the recipe step. Operation: '' # [REQUIRED] The name of a valid DataBrew transformation to be performed on the data. Parameters: # Contextual parameters for the transformation. KeyName: '' ConditionExpressions: # One or more conditions that must be met for the recipe step to succeed. - Condition: '' # [REQUIRED] A specific condition to apply to a recipe action. Value: '' # A value that the condition must evaluate to for the condition to succeed. TargetColumn: '' # [REQUIRED] A column to apply this condition to.
ここでは、sample_recipe.ymlという名前で保存しておきます。
スケルトンから入力ファイルを作成する
続いて、スケルトンから入力ファイルを作成します。Description
の値を設定したい説明に、Name
の値を更新したいレシピの名前にします。また、Steps
の値をレシピファイルの中身で置き換えます。
Description: 'Second version' Name: '更新したいレシピ名' Steps: # One or more steps to be performed by the recipe. - Action: Operation: REMOVE_VALUES Parameters: sourceColumn: white_rating ConditionExpressions: - Condition: LESS_THAN Value: '1800' TargetColumn: white_rating (略) - Action: Operation: REPLACE_TEXT Parameters: pattern: outoftime sourceColumn: victory_status value: time ran out
レシピを更新する
update-recipe
でレシピを更新します。--cli-input-yaml
には、先ほど作成したsample_recipe.ymlの内容をファイルからロードします。
aws databrew update-recipe --cli-input-yaml file://sample_recipe.yml
レシピを公開する
最後に、publish-recipe
でレシピを公開します。
aws databrew publish-recipe --name 更新したいレシピの名前
実行すると、以下のようにバージョン2.0のレシピが公開されました。
まとめ
スケルトンにしたがって作成したYAMLファイルを--cli-input-yaml
で読み込むことにより、YAML形式で出力したレシピファイルをレシピにインポートすることができました。
参考
[Tips] AWS CLI v2 の YAML Skeleton はコメント付きでちょっと親切! | DevelopersIO